const storageManager = require('../storage');

/**
 * 工具类管理工具
 */
module.exports = {
  name: 'utils',
  description: '工具类管理工具，用于添加、查询和列出工具类',
  parameters: {
    type: 'object',
    properties: {
      action: {
        type: 'string',
        enum: ['list', 'add', 'get'],
        description: '要执行的操作: list(列出所有工具类), add(添加新工具类), get(获取特定工具类)'
      },
      name: {
        type: 'string',
        description: '工具类名称，用于添加或获取工具类'
      },
      description: {
        type: 'string',
        description: '工具类描述，用于添加新工具类'
      },
      code: {
        type: 'string',
        description: '工具类代码，用于添加新工具类'
      },
      language: {
        type: 'string',
        description: '工具类使用的编程语言，如Java, Python, JavaScript等'
      },
      tags: {
        type: 'array',
        items: {
          type: 'string'
        },
        description: '工具类标签，用于分类和搜索'
      }
    },
    required: ['action']
  },
  handler: async ({ action, name, description, code, language, tags }) => {
    try {
      switch (action) {
        case 'list':
          const utilsList = storageManager.getUtils();
          return {
            utils: utilsList,
            count: utilsList.length
          };
        
        case 'add':
          if (!name) {
            throw new Error('添加工具类需要提供工具类名称');
          }
          if (!code) {
            throw new Error('添加工具类需要提供工具类代码');
          }
          
          const newUtil = storageManager.addUtil({
            name,
            description: description || '',
            code,
            language: language || 'unknown',
            tags: tags || []
          });
          
          return {
            message: `工具类 ${name} 添加成功`,
            util: newUtil
          };
        
        case 'get':
          if (!name) {
            throw new Error('获取工具类需要提供工具类名称');
          }
          
          const utilsData = storageManager.getUtils();
          const util = utilsData.find(u => u.name === name);
          
          if (!util) {
            throw new Error(`未找到工具类: ${name}`);
          }
          
          return {
            util
          };
        
        default:
          throw new Error(`未知操作: ${action}`);
      }
    } catch (error) {
      return {
        error: error.message
      };
    }
  }
}; 